package cn.ml.chuji.game.snow;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 拓薪教育 -- 腾讯课堂认证机构
 * 樱木老师
 */
public class Game extends JFrame{

    // 存放雪花对象
    private static final List<Snow> list = new ArrayList<>();

    public static void main(String[] args) {
        // 创建窗口
        Game game = new Game();
        // 设置大小
        // game.setSize(500,300);

        // 1920 1080
        // 通过方法来获取到屏幕的大小
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // 设置窗口大小
        game.setSize(screenSize);

        // 隐藏工具栏
        game.setUndecorated(true);
        // 设置成透明的
        game.setBackground(new Color(0,0,0,0));

        // 每隔1秒钟创建一个,创建出100个雪花对象,把雪花对象存入到list集合中
        game.createSnow();

        // 把雪花画窗口上（使用父类的方法）
        // 每隔100毫秒重绘一次
        game.gogo();

        // 显示窗口
       game.setVisible(true);
    }

    /**
     * 每隔100毫秒重绘一次
     */
    private void gogo() {
        // 启动任务
        Timer timer = new Timer();
        // 创建任务类
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 调用父类的方法，重绘
                repaint();
            }
        };
        timer.schedule(task,0,100);
    }

    /**
     * 每隔1秒钟创建一个,创建出100个雪花对象,把雪花对象存入到list集合中
     */
    private void createSnow() {
        // 启动任务
        Timer timer = new Timer();
        // 创建任务类
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 创建雪花对象
                Snow snow = new Snow();
                // 存入list集合
                list.add(snow);
                // 一共创建100个
                if(list.size() == 10000){
                    // 取消定时任务
                    timer.cancel();
                }
            }
        };
        // 启动  立即启动任务，每隔1秒回执行一次run方法,
        // 出现数量(密度)
        timer.schedule(task,0,1);
    }

    /**
     * 重写父类的方法，绘图的方法
     * 该方法允许向窗口上画内容（画雪花）
     * @param g
     */
    @Override
    public void paint(Graphics g) {
        super.paint(g);

        // 从list集合中获取到雪花对象，把雪花对象画到窗口上
        /*for (int i = 0; i < list.size(); i++) {
            // 获取雪花对象
            Snow snow = list.get(i);
            // 画你
            g.drawImage(snow.getImage(),snow.getX(),snow.getY(),null);
            // 调用移动方法
            snow.move();
        }*/

        //使用增强for
        for (Snow snow:list){
            // 画你
            g.drawImage(snow.getImage(),snow.getX(),snow.getY(),null);
            // 调用移动方法
            snow.move();
        }
    }

}
